100 REM ****************************** 110 REM 120 REM D I S K D I S P L A Y 130 REM 140 REM DISPLAY ANY TRACK & SECTOR 150 REM TO SCREEN OR PRINTER 160 REM 170 REM BY: ROBERT W. BAKER 180 REM FROM Q-LINK DISK # 160 190 REM 200 REM ****************************** 210 POKE53280,15:POKE53281,15 220 PRINT"[147][153]";SPC(13);"INITIALIZING" 230 CLOSE 15: OPEN 15,8,15: PRINT#15,"U0>M9" 240 INPUT#15,EN: IF EN<>31 THEN DT=0: GOTO 270 250 DT=1: PRINT#15,"U0>H0": INPUT#15,EN: IF EN=31 THEN 270 260 PRINT"[152]CHANGING 1571 DISK TO DOUBLE SIDED MODE": PRINT#15,"U0>M1" 270 CLOSE 15: DIM A$(255),B$(35),TS(70) 280 NS$=CHR$(13): NL$=CHR$(0): SP$=CHR$(160): HX$="0123456789ABCDEF" 290 T$(1)="SEQ": T$(2)="PRG": T$(3)="USR": T$(4)="REL" 300 LX=8: POKE 981,15: POKE 65280,0: IF PEEK(65280)<>0 THEN 320: REM C64 310 IF PEEK(215)=128 THEN LX=16: REM 80 COLUMN C128 320 FOR J=1 TO 17: TS(J)=21: NEXT J: FOR J=18 TO 24: TS(J)=19: NEXT J 330 FOR J=25 TO 30: TS(J)=18: NEXT J: FOR J=31 TO 35: TS(J)=17: NEXT J 340 FOR J=36 TO 70: TS(J)=TS(J-35): NEXT J: GOTO 510 350 CLOSE 15: PRINT"[147] D I S K D I S P L A Y[152]": GOSUB 1640 360 IF PD=3 THEN PRINT SPC(16);"DISPLAY[146]" 370 IF PD=4 THEN PRINT SPC(17);"PRINT[146]" 380 PRINT SPC(7);"1 - BLOCK(S) AT TRK & SEC" 390 PRINT SPC(7);"2 - BLOCKS IN FILE" 400 PRINT SPC(7);"3 - LINKS IN FILE" 410 PRINT SPC(7);"4 - BLOCK AVAIL MAP (BAM)" 420 PRINT SPC(7);"5 - DIRECTORY" 430 PRINT SPC(7);"Q = QUIT"; 440 IF PD=3 THEN PRINT", P = PRINT OUTPUT" 450 IF PD=4 THEN PRINT", D = DISPLAY OUTPUT" 460 GOSUB 1640: PRINT" DESIRED FUNCTION: "; 470 GET Z$: IF Z$="" THEN 470 480 IF Z$="Q" THEN PRINT Z$: GOTO 2010 490 IF Z$="P" AND PD=3 THEN PD=4: SC$=NS$: GOTO 520 500 IF Z$<>"D" OR PD<>4 THEN 530 510 PD=3: SC$="[147]" 520 CLOSE 4: OPEN 4,PD: GOTO 350 530 F=VAL(Z$): IF F<1 OR F>5 THEN 470 540 PRINT Z$: ON F GOTO 550,630,630,660,660 550 PRINT"[147][152]DISPLAY BLOCK(S) AT TRACK & SECTOR:": GOSUB 1640 560 PRINT"ENTER STARTING TRACK & SECTOR NUMBERS" 570 PRINT"IN DECIMAL, OR IN HEX PRECEDED BY A" 580 PRINT"DOLLAR SIGN ($).": GOSUB 1640 590 PRINT"STARTING TRACK#: ";: GOSUB 1700: IF X$=SP$ THEN 350 600 T=N: IF T<1 OR T>70 THEN 550 610 PRINT SPC(9);"SECTOR#: ";: GOSUB 1700: S=N: IF N<0 OR N>TS(T) THEN 550 620 GOTO 660 630 PRINT"FILENAME: ";: GOSUB 1690: IF X$=SP$ THEN 350 640 FL$=LEFT$(X$+"[160][160][160][160][160][160][160][160][160][160][160][160][160][160][160][160]",16): REM <-- 16 SHIFTED SPACES 650 PRINT"[147]SEARCHING FOR FILE: ";FL$ 660 OPEN 15,8,15,"I0": INPUT#15,EN,EM$,ET,ES: IF EN=0 THEN 690 670 IF EN<>21 AND ET<>18 AND ES<>0 THEN GOSUB 2000: GOTO 1200 680 PRINT"PLEASE INSERT DISK & RESELECT FUNCTION!": GOTO 1200 690 CLOSE 2: OPEN 2,8,2,"#0": GOSUB 1990: IF EN>0 THEN 1200 700 ON F GOTO 900,710,710,1240,1240 710 T=18: S=1 720 GOSUB 1950: IF EN>0 THEN 1200 730 T=-1: FOR J=2 TO 226 STEP 32: FT=ASC(A$(J)) AND 7: IF FT=0 THEN 800 740 N=0: FOR I=1 TO 16: IF MID$(FL$,I,1)<>A$(J+I+2) THEN N=1: I=16 750 NEXT I: IF N=1 THEN 800 760 N=ASC(A$(J+28))+(ASC(A$(J+29))*256) 770 IF N=0 THEN PRINT"ZERO LENGTH FILE": FT=-1: GOTO 790 780 T=ASC(A$(J+1)): S=ASC(A$(J+2)): T1=ASC(A$(J+19)): S1=ASC(A$(J+20)) 790 J=256 800 NEXT J: BK=1: IF FT=-1 THEN 1200 810 IF T>0 THEN 840 820 T=NT: S=NS: IF T>0 THEN 720 830 PRINT"FILE NOT FOUND": GOTO 1200 840 IF FT<>4 THEN 900 850 PRINT"OK, FILE FOUND....." 860 PRINT"SELECTED FILE IS A RELATIVE DATA FILE" 870 PRINT"WANT DATA (D) OR SIDE SECTORS (S): "; 880 GET C$: IF C$="S" THEN T=T1: S=S1: GOTO 900 890 IF C$<>"D" THEN 880 900 GOSUB 1800 910 IF DT=0 AND T>35 THEN 1180 920 GOSUB 1980: IF EN>0 THEN 1200 930 IF F<3 THEN 990 940 N=1: GOSUB 1960: N=BK: L=6: GOSUB 1650: BK=BK+1: N=T: L=5: GOSUB 1910 950 N=S: GOSUB 1910: PRINT#4: T=NT: S=NS: IF T=0 THEN 1190 960 GET Z$: IF Z$="Q" THEN 350 970 IF PD=3 THEN LL=LL+1: IF LL=16 THEN 1160 980 GOTO 910 990 L4=LX: IF PD=4 THEN L4=16 1000 JJ=256-L4: FOR J=0 TO JJ STEP L4 1010 B$=": ": N=J: GOSUB 1930: A$=C$+": " 1020 FOR I=0 TO L4-1: GET#2,A$(I): IF A$(I)="" THEN A$(I)=NL$ 1030 N=ASC(A$(I)): GOSUB 1930: A$=A$+C$+" " 1040 IF (N AND 127)<32 THEN B$=B$+"[153][204][146][152]": GOTO 1060 1050 B$=B$+A$(I) 1060 NEXT I: PRINT#4,A$;B$: IF PD=3 THEN LL=LL+1 1070 IF J=0 THEN NT=ASC(A$(0)): NS=ASC(A$(1)) 1080 GET Z$: IF Z$="Q" THEN 1120 1090 IF LL<16 OR J>=JJ THEN 1130 1100 GOSUB 1660: IF Z$="Y" THEN GOSUB 1810: GOTO 1130 1110 PRINT"[145] ": PRINT"[145][145]";: REM <-- 23 SPACES 1120 J=JJ 1130 NEXT J: T=NT: S=NS: IF T=0 THEN 1190 1140 N=T: GOSUB 1930: PRINT"NEXT TRACK:";T;"($";C$;"), SECTOR:";S; 1150 N=S: GOSUB 1930: PRINT "($";C$;")" 1160 GOSUB 1660: IF Z$="Y" THEN 900 1170 GOTO 350 1180 PRINT"DISK DRIVE CANNOT READ TRACKS ABOVE 35": GOTO 1210 1190 PRINT"LAST BLOCK IN CHAIN...": GOTO 1210 1200 IF PD=4 THEN PRINT"[147]DONE PRINTING....." 1210 PRINT"PRESS TO RETURN TO MAIN MENU" 1220 GET Z$: IF Z$="" THEN 1220 1230 GOTO 350 1240 PRINT"[147]READING DISK BLOCK AVAIL MAP (BAM)" 1250 T=18: S=0: GOSUB 1950: IF EN>0 THEN 1200 1260 A$="": FOR N=144 TO 159: A$=A$+A$(N): NEXT N: B$=A$(162)+A$(163) 1270 GOSUB 1800: BK=1: IF F=5 THEN 1510 1280 JJ=17: FOR J=4 TO 140 STEP 4: N=BK: L=2: GOSUB 1650 1290 FOR L=1 TO 3: N=ASC(A$(J+L)): FOR I=0 TO 7: IF L<3 THEN 1330 1300 IF I+17<=TS(BK) THEN 1330 1310 IF I<5 THEN FOR N=I TO 4: PRINT#4," ";:NEXT N 1320 I=7: GOTO 1350 1330 IF (N AND 2^I)>0 THEN PRINT#4,"[153][204][146][152]";: GOTO 1350 1340 PRINT#4,"[150][204][146][152]"; 1350 NEXT I,L 1360 N=TS(BK): L=4: GOSUB 1650: N=ASC(A$(J)): GOSUB 1650: I=N 1370 N=TS(BK)-I: GOSUB 1650: PRINT#4: BK=BK+1: IF PD=3 THEN LL=LL+1 1380 GET Z$: IF Z$="Q" THEN 1420 1390 IF J=140 AND A$(3)=NL$ THEN 1430 1400 IF LL0 THEN 1200 1480 A$(3)=NL$: FOR J=1 TO 35: A$(J*4)=B$(J) 1490 FOR I=1 TO 3: GET#2,Z$: IF Z$="" THEN Z$=NL$ 1500 A$(J*4+I)=Z$: NEXT I,J: GOTO 1280 1510 T=NT: S=NS: GOSUB 1950: IF EN>0 THEN 1200 1520 FOR J=2 TO 226 STEP 32: FT=ASC(A$(J)) AND 7: IF FT=0 OR FT>4 THEN 1600 1530 N=ASC(A$(J+28))+(ASC(A$(J+29))*256) 1540 C$="": FOR I=3 TO 18: C$=C$+A$(J+I): NEXT I 1550 L=5: GOSUB 1650: PRINT#4,C$;" ";T$(FT): IF PD=3 THEN LL=LL+1 1560 GET Z$: IF Z$="Q" THEN 1590 1570 IF LL<16 THEN 1600 1580 GOSUB 1660: IF Z$="Y" THEN GOSUB 1800: GOTO 1600 1590 T=-1: J=256 1600 NEXT J: IF T=-1 THEN 350 1610 IF NT>0 THEN 1510 1620 GOTO 1200 1630 REM ***** SUBROUTINES ***** 1640 PRINT"[195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195]": RETURN 1650 PRINT#4,RIGHT$(" "+STR$(N),L);" ";: RETURN 1660 PRINT"CONTINUE DISPLAY (Y/N): " 1670 GET Z$: IF Z$="Y" OR Z$="N" THEN RETURN 1680 GOTO 1670 1690 PRINT"";SP$;"[157][157][157]";: INPUT X$: RETURN 1700 N=-1: GOSUB 1690: IF X$=SP$ THEN RETURN 1710 IF LEFT$(X$,1)="$" THEN 1740 1720 FOR J=1 TO LEN(X$): C$=MID$(X$,J,1): IF C$<"0" OR C$>"9" THEN 1780 1730 NEXT J: N=VAL(X$): RETURN 1740 IF LEN(X$)<2 THEN RETURN 1750 N=0: FOR J=2 TO LEN(X$): C$=MID$(X$,J,1): IF C$<"0" THEN 1780 1760 IF C$<="9" THEN N=N*16+VAL(C$): GOTO 1790 1770 IF C$>="A" THEN IF C$<="F" THEN N=N*16+ASC(C$)-55: GOTO 1790 1780 J=99: N=-1 1790 NEXT J: RETURN 1800 IF PD=4 THEN PRINT"[147]PRINTING SELECTED DISK DATA....." 1810 LL=0: ON F GOTO 1890,1890,1820,1860,1850 1820 PRINT#4,SC$;"BLOCK LINKAGE IN FILE: ";FL$: PRINT#4 1830 PRINT#4," BLOCK# TRACK# SECTOR#" 1840 PRINT#4," ------ -------- --------": RETURN 1850 PRINT#4,SC$;"DIRECTORY OF: ";A$;" ID: ";B$: PRINT#4: RETURN 1860 PRINT#4,SC$;"BAM FOR DISK: ";A$;" ID: ";B$: PRINT#4 1870 PRINT#4,"TRK - SEC - 11111111112 #SEC FREE USED" 1880 PRINT#4," 012345678901234567890 ---- ---- ----": RETURN 1890 PRINT#4,SC$;"TRACK:";T;: N=T: GOSUB 1920 1900 PRINT#4,", SECTOR:";S;: N=S: GOSUB 1920: PRINT#4: PRINT#4: RETURN 1910 GOSUB 1650 1920 GOSUB 1930: PRINT#4,"($";C$;")";: RETURN 1930 A1=INT(N/16): A2=INT(N-16*A1) 1940 C$=MID$(HX$,A1+1,1)+MID$(HX$,A2+1,1): RETURN 1950 N=255: GOSUB 1980: IF EN>0 THEN RETURN 1960 FOR J=0 TO N: GET#2,A$(J): IF A$(J)="" THEN A$(J)=NL$ 1970 NEXT J: NT=ASC(A$(0)): NS=ASC(A$(1)): RETURN 1980 PRINT#15,"U1:2,0,";T;S 1990 INPUT#15,EN,EM$,ET,ES: IF EN=0 THEN RETURN 2000 PRINT"DISK ERROR:[146]";EN;" TRK/SEC:[146]";ET;"/";ES: PRINT EM$: RETURN 2010 CLOSE 2: CLOSE 4: CLOSE 15